home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / magazi~1 / 404 / c33.c < prev    next >
C/C++ Source or Header  |  1989-04-11  |  10KB  |  344 lines

  1. /************************************************************
  2. *                       MICROCHECK ST                       *
  3. *                     by Clayton Walnum                     *
  4. *                                                           *
  5. *                  Copyright 1989 by ST-LOG                 *
  6. *                   Developed with Laser C                  *
  7. ************************************************************/
  8.  
  9. #include <stdio.h>
  10. #include <osbind.h>
  11. #include <gemdefs.h>
  12. #include <obdefs.h>
  13. #include <fcntl.h>
  14. #include "microchk.h"
  15.  
  16. #define WA_UPPAGE    0
  17. #define WA_DNPAGE    1
  18. #define WA_UPLINE    2
  19. #define WA_DNLINE    3
  20. #define WA_LFPAGE    4
  21. #define WA_RTPAGE    5
  22. #define BOLD         1
  23. #define LIGHT        2
  24. #define TRUE         1
  25. #define FALSE        0
  26. #define YES          1
  27. #define NO           2
  28. #define LEFT_BUTTON  0x0001
  29. #define BUTTON_DOWN  0x0001
  30. #define NUM_CLICKS   2
  31. #define PARTS        NAME|INFO|UPARROW|DNARROW|VSLIDE|FULLER|CLOSER|HSLIDE
  32. #define NUM_COLUMNS  93
  33. #define MED          1
  34. #define MATCH        0
  35. #define REC_LENGTH   117
  36. #define FROM_BEG     0
  37. #define FROM_CUR_POS 1
  38. #define FAILED       (-1)
  39. #define DFLT_DRV     0
  40. #define VISIBLE      1
  41. #define MEDIUM       1
  42. #define HIGH         2
  43. #define CHAR_AVAIL   -1
  44. #define CONSOLE      2
  45. #define ESCAPE       27
  46. #define CNTL_A       0x1e01
  47. #define CNTL_B       0x3002
  48. #define CNTL_C       0x2e03
  49. #define CNTL_D       0x2004
  50. #define CNTL_E       0x1205
  51. #define CNTL_G       0x2207
  52. #define CNTL_I       0x1709
  53. #define CNTL_M       0x320d
  54. #define CNTL_N       0x310e
  55. #define CNTL_O       0x180f
  56. #define CNTL_P       0x1910
  57. #define CNTL_Q       0x1011
  58. #define CNTL_R       0x1312
  59. #define CNTL_S       0x1f13
  60. #define CNTL_W       0x1117
  61. #define CNTL_Y       0x1519
  62.  
  63. int work_in[11], work_out[57], contrl[12],
  64.     intin[128], ptsin[128], intout[128], ptsout[128];
  65.  
  66. int msg_buf[8];
  67.  
  68. long pwrs[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000 };
  69.  
  70. int handle, dum, file, key,
  71.     fullx, fully, fullw, fullh, wrkx, wrky, wrkw, wrkh, 
  72.     w_h1, w_h2, res, full, num_trans, charw, charh, curchknum,
  73.     num_deps, num_chks, loaded, all_done, mouse_x, mouse_y,
  74.     num_clicks, edit_top, left, start_mnth, end_mnth, mnth, srch_trans,
  75.     start_num, end_num, cur_count, cur_top, search, saved, canceling,
  76.     month, full_draw, oldcolr;
  77.  
  78. int zero = 0;
  79.  
  80. char filename[64], chkname[30], chkstreet[30], chkcity[50],
  81.      date_but[10], bal_but[10], trans_but[4],
  82.      check_but[4], dep_but[4], mnth_but[10], acct_name[64],
  83.      monthfile[64], cur_chk_num[6], cur_date[7], future_use[40],
  84.      cancmnth[5], chtot[20], dptot[20], chcnt[10], dpcnt[10];
  85.  
  86. char windname[64];
  87. char noacct[] = "No account opened";
  88.  
  89. char canc[] = "CANCEL CHECKS";
  90. char newm[] = "  NEW MONTH  ";
  91.  
  92. char *months[] = { "Month 0", "January", "February", "March", "April",
  93.                    "May", "June", "July", "August", "September", "October",
  94.                    "November", "December" };
  95.  
  96. char spaces[] = "                              ";
  97. char infotext[] = "  Number   Amount    Payee                           Memo                            Date";
  98. char *string, *srch_payee, *srch_memo;
  99. char rule[] = "------------------------------------------------------------------------------";
  100.  
  101. long balance, start_amnt, end_amnt;
  102.  
  103. OBJECT *menu_addr, *check_addr, *newacct_addr, *newfile_addr, 
  104.        *newdate_addr, *srchdial_addr, *cancdial_addr, *recndial_addr,
  105.        *rprtdial_addr, *lkmndial_addr, *srtodial_addr;
  106.  
  107. FILE *acctfile, *mfile;
  108.  
  109. char *get_tedinfo_str ();
  110. FILE *opn_nw_auto ();
  111. long str_to_long ();
  112.  
  113. struct check {
  114.    char number[5];
  115.    char payee[31];
  116.    char memo[31];
  117.    char date[9];
  118.    long amount;
  119.    char cancel[2];
  120. };
  121.  
  122. struct check checks[500];
  123. struct check srch_checks[1000];
  124. struct check *cur_chk_strc;
  125.  
  126. TEDINFO *ob_tedinfo;
  127.  
  128.  
  129. main ()
  130. {
  131.    appl_init ();            /* Initialize application.    */
  132.    open_vwork ();           /* Set up workstation.        */
  133.    do_mcheck();             /* Go do MicroCheck.          */
  134.    v_clsvwk (handle);       /* Close virtual workstation. */
  135.    Setcolor ( 2, oldcolr ); /* Reset color register.      */
  136.    appl_exit ();            /* Back to the desktop.       */
  137. }
  138.  
  139.  
  140. do_mcheck()
  141. {
  142.    oldcolr = Setcolor ( 2, -1 );
  143.    Setcolor ( 2, 0x005 );
  144.    if ( (res = Getrez ()) != HIGH && res != MEDIUM )
  145.       form_alert(1,"[0][MicroCheck ST runs|only in high or medium |resolution.][OK]");
  146.    else {
  147.       graf_mouse ( ARROW, &dum );
  148.       strcpy ( acct_name, "NONE" );
  149.       strcpy ( cur_chk_num, "0000" );
  150.       balance = 0;
  151.       month = -1;
  152.       edit_top = cur_top = num_trans = num_chks = num_deps = 0;
  153.       left = saved = TRUE;
  154.       search = canceling = full_draw = FALSE;
  155.       cur_chk_strc = checks;
  156.       get_date ();
  157.  
  158.       if ( !rsrc_load ( "\MICROCHK.RSC" ) )
  159.          form_alert ( 1, "[1][MICROCHK.RSC missing!][Okay]" );
  160.       else {
  161.          rsrc_gaddr ( R_TREE, MENUBAR, &menu_addr );
  162.          rsrc_gaddr ( R_TREE, CHEKDIAL, &check_addr );
  163.          rsrc_gaddr ( R_TREE, NEWADIAL, &newacct_addr );
  164.          rsrc_gaddr ( R_TREE, FILEDIAL, &newfile_addr );
  165.          rsrc_gaddr ( R_TREE, DATEDIAL, &newdate_addr );
  166.          rsrc_gaddr ( R_TREE, SRCHDIAL, &srchdial_addr );
  167.          rsrc_gaddr ( R_TREE, CANCDIAL, &cancdial_addr );
  168.          rsrc_gaddr ( R_TREE, RECNDIAL, &recndial_addr );
  169.          rsrc_gaddr ( R_TREE, RPRTDIAL, &rprtdial_addr );
  170.          rsrc_gaddr ( R_TREE, LKMNDIAL, &lkmndial_addr );
  171.          rsrc_gaddr ( R_TREE, SRTODIAL, &srtodial_addr );
  172.          menu_bar ( menu_addr, TRUE );
  173.          set_menu_entries ();
  174.          wind_get ( 0, WF_WORKXYWH, &fullx, &fully, &fullw, &fullh );
  175.          w_h1 = wind_create ( 0, fullx, fully, fullw, fullh );
  176.          w_h2 = wind_create ( PARTS, fullx, fully, fullw, fullh );
  177.          wind_set ( w_h2, WF_NAME, noacct, 0, 0 );
  178.          wind_set ( w_h2, WF_INFO, infotext, 0, 0 );
  179.          wind_open ( w_h1, fullx, fully, fullw, fullh );
  180.          wind_open ( w_h2, fullx, fully, fullw, 316 - 162*(res==MED) );
  181.          calc_vslid ( 1 );
  182.          calc_hslid ( NUM_COLUMNS );
  183.          full = FALSE;
  184.          loaded = FALSE;
  185.  
  186.          get_event ();
  187.  
  188.          menu_bar ( menu_addr, FALSE );
  189.          wind_close ( w_h2 );
  190.          wind_delete ( w_h2 );
  191.          wind_close ( w_h1 );
  192.          wind_delete ( w_h1 );
  193.          rsrc_free ();
  194.       }
  195.    }
  196. }
  197.  
  198.  
  199. get_event ()
  200. {
  201.    int h, event;
  202.  
  203.    all_done = FALSE;
  204.  
  205.    while ( !all_done ) {
  206.       event = evnt_multi ( MU_KEYBD|MU_MESAG|MU_BUTTON, NUM_CLICKS, 
  207.                          LEFT_BUTTON, BUTTON_DOWN,
  208.                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, msg_buf, 0, 0,
  209.                          &mouse_x, &mouse_y, &dum, &dum, &key, &num_clicks );
  210.  
  211.       if ( event & MU_KEYBD )
  212.          handle_keys ();
  213.  
  214.       if ( event & MU_MESAG )
  215.          handle_messages ();
  216.  
  217.       if ( event & MU_BUTTON )
  218.          handle_button ();
  219.    }
  220. }
  221.  
  222.  
  223. set_menu_entries ()
  224. {
  225.    menu_ienable ( menu_addr, CLOSEMBR, loaded );
  226.    menu_ienable ( menu_addr, OPENMBR, !loaded );
  227.    menu_ienable ( menu_addr, NEWACCNT, !loaded );
  228.    menu_ienable ( menu_addr, QUIT, TRUE );
  229.    menu_ienable ( menu_addr, ENTER, loaded );
  230.    menu_ienable ( menu_addr, SEARCH, loaded );
  231.    menu_ienable ( menu_addr, CHKCAN, loaded );
  232.    menu_ienable ( menu_addr, NEWMNTH, loaded );
  233.    menu_ienable ( menu_addr, RECONCIL, loaded );
  234.    menu_ienable ( menu_addr, PRNTWIND, loaded );
  235.    menu_ienable ( menu_addr, PRNTREG, loaded );
  236.    menu_ienable ( menu_addr, NEWYEAR, !loaded );
  237.    menu_ienable ( menu_addr, CHKAUTO, loaded );
  238.    menu_ienable ( menu_addr, NEWDATE, TRUE );
  239.    menu_ienable ( menu_addr, IMPORT, !loaded );
  240. }
  241.  
  242.  
  243. calc_vslid ( line_cnt )
  244. int line_cnt;
  245. {
  246.    int lines_avail, vslid_siz, pos;
  247.  
  248.    wind_get ( w_h2, WF_WORKXYWH, &wrkx, &wrky, &wrkw, &wrkh );
  249.    lines_avail = wrkh / charh;
  250.    vslid_siz = 1000 * lines_avail / line_cnt;
  251.    wind_set ( w_h2, WF_VSLSIZE, vslid_siz, 0, 0, 0 );
  252.    pos = (int) ( (float)(cur_top) ) / 
  253.          ( (float)(line_cnt - lines_avail) ) * 1000;
  254.    wind_set ( w_h2, WF_VSLIDE, pos, 0, 0, 0 );
  255. }
  256.  
  257.  
  258. calc_hslid ( col_cnt )
  259. int col_cnt;
  260. {
  261.    int cols_avail, hslid_siz, pos, lft;
  262.  
  263.    if ( left )
  264.       lft = 0;
  265.    else
  266.       lft = 16;
  267.    wind_get ( w_h2, WF_WORKXYWH, &wrkx, &wrky, &wrkw, &wrkh );
  268.    cols_avail = wrkw / charw;
  269.    hslid_siz = (int) ((1000L * (long) cols_avail) / (long) col_cnt);
  270.    wind_set ( w_h2, WF_HSLSIZE, hslid_siz, 0, 0, 0 );
  271.    pos = (int) ( (float)(lft) ) / ( (float)(col_cnt - cols_avail) ) * 1000;
  272.    wind_set ( w_h2, WF_HSLIDE, pos, 0, 0, 0 );
  273. }
  274.  
  275.  
  276. open_vwork ()
  277. {
  278.    int i;
  279.  
  280.    handle = graf_handle ( &charw, &charh, &dum, &dum);
  281.    for ( i=0; i<10; work_in[i++] = 1 );
  282.    work_in[10] = 2;
  283.    v_opnvwk ( work_in, &handle, work_out );
  284. }
  285.  
  286.  
  287. get_date ()
  288. {
  289.    int date, day, mnth, year;
  290.    char d[3], m[3], y[4];
  291.  
  292.    date = Tgetdate ();
  293.    day = date & 0x001f;
  294.    mnth = (date >> 5) & 0x000f;
  295.    year = ((date >> 9) & 0x007f) + 80;
  296.    year = year % 100;
  297.    sprintf ( d, "%d", day );
  298.    sprintf ( m, "%d", mnth );
  299.    sprintf ( y, "%d", year );
  300.    if ( mnth < 10 ) {
  301.       date_but[0] = '0';
  302.       cur_date[0] = '0';
  303.       strcpy ( &date_but[1], m );
  304.       strcpy ( &cur_date[1], m );
  305.    }
  306.    else {
  307.       strcpy ( date_but, m );
  308.       strcpy ( cur_date, m );
  309.    }
  310.    date_but[2] = '/';
  311.    if ( day < 10 ) {
  312.       date_but[3] = '0';
  313.       cur_date[2] = '0';
  314.       strcpy ( &date_but[4], d );
  315.       strcpy ( &cur_date[3], d );
  316.    }
  317.    else {
  318.       strcpy ( &date_but[3], d );
  319.       strcpy ( &cur_date[2], d );
  320.    }
  321.    date_but[5] = '/';
  322.    if ( year < 10 ) {
  323.       date_but[6] = '0';
  324.       cur_date[4] = '0';
  325.       strcpy ( &date_but[7], y );
  326.       strcpy ( &cur_date[5], y );
  327.    }
  328.    else {
  329.       strcpy ( &date_but[6], y );
  330.       strcpy ( &cur_date[4], y );
  331.    }
  332. }
  333.  
  334.  
  335. handle_keys ()
  336. {}
  337.  
  338. handle_messages ()
  339. {}
  340.  
  341. handle_button ()
  342. {}
  343.  
  344.